#ifndef OMPL_BASE_COST_ESTIMATOR_BASE_
#define OMPL_BASE_COST_ESTIMATOR_BASE_

#include "ompl/base/State.h"
#include "ompl/util/ClassForward.h"
#include "ompl/base/SpaceInformation.h"


namespace ompl
{
  namespace base
  {
    ClassForward(StateCostEstimator);
    ClassForward(MotionCostEstimator);

    class StateCostEstimator
    {
    public:
      StateCostEstimator(SpaceInformation* si) : si_(si) {}

      virtual ~StateCostEstimator() {}

      virtual double computeCost(const State* state) const = 0;

    protected:
      SpaceInformation* si_;
    };


    class MotionCostEstimator
    {
    public:
      MotionCostEstimator(SpaceInformation* si) : si_(si) {}

      virtual ~MotionCostEstimator() {}

      virtual double computeCost(const State* s1, const State* s2) const = 0;

    protected:
      SpaceInformation* si_;
    };
  }
}

#endif
